package com.sky.alogrithm.chapter02_sort;

import static com.sky.alogrithm.chapter02_sort.Example.each;
import static com.sky.alogrithm.chapter02_sort.Example.less;

/**
 * 选择排序
 * 原理：首先，找到数组中最小的那个元素，其次，将它和数组的第一个元素交换位置，
 * 再次，在剩下的元素中找到最小的元素，将它与数据的第二个元素交换位置，
 * 如此往复，直到将整个数组排序
 *
 * 特点： 1. 运行时间和输入无关 2.数据移动是最少得
 *
 * 缺点：一个已经有序的数组或是主键全部相等的数组和一个元素随机排列的数组所用的排序时间一样长
 */
public class Selection {

    public static void sort(Comparable[] a){
        int N = a.length;
        for(int i = 0; i < N; i++){
            int min = i;
            for(int j = i + 1; j < N; j++){
                if(less(a[j], a[min])){
                    min = j;
                }
                each(a, i, min);
            }
        }
    }
}
